Программа построения графика функции

к статье Построение графика функции на С с пользованием библиотеки WinBGIm

#define _USE_MATH_DEFINES 
#include <math.h> 
#include "graphics.h"
 
double xmin, xmax, ymin, ymax;   //глобальные - диапазон логических координат
 
//Для преобразования X из интервала [a,b] -> [c,d] делаем (X-a)/(b-a)*(d-c)+c.
//Создаем пару функций: sx(x) и sy(y)
double sx(double x)
{
    return (x-xmin)/(xmax-xmin)*getmaxx();
}
double sy(double y)
{
    return getmaxy()-(y-ymin)/(ymax-ymin)*getmaxy();   //'Y вверх ногами, поэтому getmaxy()-...
}
 
//"любая" функция. Можете подставить любую другую
double f(double x)
{
    return 1.5*x*x-2*sin(5*x);
}
 
int main(void)
{
   initwindow(400, 300);
 
   /* график */
   //f(x)=1.5*x*x-2*sin(5*x), x в [-2,3]
   double x, y;
   int nPoints;
   double dx;
   xmin=-2;
   xmax=3;
 
   nPoints=getmaxx();   //Максимальное число точек по X 
   dx=(xmax-xmin)/nPoints;   //шаг в логических координатах
 
   //Для определения ymin, ymax нужен цикл
   ymin=f(xmin);
   ymax=ymin;
   for (x=xmin; x<=xmax; x+=dx)
   {
      y=f(x);
      if (ymin > y) ymin = y;
      if (ymax < y) ymax = y;
   }
   //Рисуем график. Цикл такой же
   //Включаем красный, жирный (3 пиксела)
   setcolor(RED);
   setlinestyle(SOLID_LINE, 0, THICK_WIDTH);
   y=f(xmin);
   moveto(sx(xmin), sy(y));   //установка первой точки
   for (x=xmin; x<=xmax; x+=dx)
   {
      y=f(x);
      lineto(sx(x), sy(y));  //соединяем точки
   }
   //Включаем обратно белый, нормальный (1 пиксел)
   setcolor(WHITE);
   setlinestyle(SOLID_LINE, 0, NORM_WIDTH);
 
   //Добавим оси
   line(sx(xmin), sy(0), sx(xmax), sy(0));
   line(sx(0), sy(ymin), sx(0), sy(ymax));
 
   //подписи
   outtextxy(sx(0)+5, sy(0)+2, "0,0");
   outtextxy(sx(xmax)-20, sy(0)+2, "X");
   outtextxy(sx(0)+5, sy(ymax)+10, "Y");
 
   getch();
   closegraph();
   return 0;
}